home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / STRINGS.SWG / 0018_Three ways to Uppercase.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-31  |  1KB  |  70 lines

  1. Three ways to convert a string to uppercase (without international support).
  2.  
  3. {$R-,S-,I- }
  4.  
  5. Procedure UpCaseStr0(Var s : String);
  6.  
  7. Var
  8.   i : Integer;
  9.  
  10. Begin
  11.   For i := 1 to Length(s) Do
  12.     s[i] := UpCase(s[i]);
  13. end;  { UpCaseStr0 }
  14.  
  15. Procedure UpCaseStr1(Var s : String);
  16.  
  17. Var
  18.   i, len : Integer;
  19.  
  20. Begin
  21.   i := 0;
  22.   len := Ord(s[0]);
  23.   Repeat
  24.     Inc(i);
  25.     If i > len Then
  26.       Break;
  27.     If s[i] in ['a'..'z'] Then
  28.       Dec(s[i], 32);
  29.   Until False;
  30. end;  { UpCaseStr1 }
  31.  
  32. Procedure UpCaseStr2(Var s : String); Assembler;
  33.  
  34. ASM
  35.         PUSH   DS
  36.         LDS    SI, s
  37.         LES    DI, s
  38.         CLD
  39.         XOR    AH, AH
  40.         LODSB
  41.         STOSB
  42.         XCHG   AX, CX
  43.         JCXZ   @2
  44. @1:     LODSB
  45.         SUB    AL, 'a'
  46.         CMP    AL, 'z'-'a'+1
  47.         SBB    AH, AH
  48.         AND    AH, 'a'-'A'
  49.         SUB    AL, AH
  50.         ADD    AL, 'a'
  51.         STOSB
  52.         LOOP   @1
  53. @2:     POP    DS
  54. end;  { UpCaseStr2 }
  55.  
  56.  
  57.    Procedure     Size     Execution timing*
  58.                  (bytes)  (seconds)
  59.  
  60.    UpCaseStr0    76       4.32      = 1.00
  61.    UpCaseStr1    67       2.76      = 0.63
  62.    UpCaseStr2    39       1.31      = 0.30
  63.  
  64.    *30,000 times on a 40 MHz 386
  65.  
  66. Wilbert
  67.  
  68. --- GEcho 1.00/beta
  69.  * Origin: Charge of the Light Bregade (2:281/256.14)
  70.